// 面向对象程序设计（Object Oriented Programming）OOP 是一张计算机编程架构
// OOP特点 = 封装 + 继承 + 多态
// OOP达到了软件工程的主要目标：重要性、灵活性和扩展性

// 人的认知本身就是会从潜意识中对世界的事务进行分类
// 因为分类认知之后，给一个具体对象打上分类标签，方便我们记忆，甚至是扩展记忆的连贯性

// 所以面向对象中所说的类：就是具有相似属性，相似行为的内容进行代码的归类。
// 无非也就是为了开发者的记忆，阅读和扩展

// 从类型系统的角度来看，一个类，其实就是创建了一种新的数据结构类型。所以说，在很多语言当中，一个类就是一个类型

// 在TS当中，类也是一种结构化类型

// ES6之前，js使用构造函数来创建类，基于原型的效果来实现继承。
// 但是这样给函数带来了二义性。也就是说一个构造函数，既能表示是一个简单函数，也能表示是一个构造函数(类)
// 虽然之前一直约定俗成的默认只要函数名首字母大写就是构造函数，但是一直没有语法层面上的区分

// 所以ES6之后，加上了class和箭头函数，专门用来区分类和一般函数

// TS中扩展了类的一些语法，比如抽象类，接口以及一些访问符...目的就是为了面向对象的语法更加完整。